﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Data.SQLite;
using System.Data;
using System.IO;
using ServirMovil.Clases.Movil;

namespace ServirMovil.Clases.Datos
{
    /// <summary>
    /// <para>Clase       : DataBaseLite</para>
    /// <para>Descripcion : Permite controlar una base de datos en Movil-Lite</para>
    /// <para>Autor       : Pedro Miguel Vera Rafael (pedro.verarafael@gmail.com)</para>
    /// <para>Fecha       : 15/01/2013</para>
    /// <para>Empresa     : GS1 Peru</para>
    /// </summary>
    /// <remarks>
    /// </remarks>
    /// <history>
    /// 	[Pedro Miguel Vera Rafael]	15/01/2013	Created
    /// </history>
    public class DataBaseLite : IDisposable
    {
        #region --- Variable Privadas ---
        protected SQLiteConnection conexion = null;
        protected SQLiteCommand comando = null;

        private const string FORMATO_CADENA_CONEXION = "Data Source={0};New={1};Compress=False;Version={2}";
        private const string FORMATO_ERROR_SCRIPT = "Error:{0} \r\n Script: {1} \r\n ¿Desea Continuar?";
        #endregion

        #region --- Constructor y Destructor ---
        public DataBaseLite()
        {
            conexion = new SQLiteConnection(string.Format(FORMATO_CADENA_CONEXION, 
                                                          ParametrosAplicacion.STR_RUTABASEDATOS, 
                                                          false, 
                                                          3));
        }

        private bool disposedValue = false; // Para detectar llamadas redundantes
        // IDisposable
        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposedValue)
            {
                if (disposing)
                {
                    if (this.conexion != null)
                    {
                        if (this.conexion.State == ConnectionState.Open) this.conexion.Close();
                        this.conexion.Dispose();
                    }
                    this.conexion = null;
                }
            }
            this.disposedValue = true;
        }

        public void Dispose()
        {
            // No cambie este código. Coloque el código de limpieza en Dispose (ByVal que se dispone como Boolean).
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        #endregion

        #region --- Metodos Iniciales ---
        /// <summary>
        /// Metodo: Que permite aperturar la conexion a la Base de Datos
        /// </summary>
        /// <returns>Objeto conexion operturada</returns>
        protected SQLiteConnection conectarBD()
        {
            if (this.conexion.State == ConnectionState.Closed) this.conexion.Open();
            return this.conexion;
        }
        #endregion
    }
}
